import { request } from "@/api";

// 公共接口路径常量
const API_PATHS = {
  LOGIN: '/login',
  USER: '/user',
  WRONG_ANSWER: '/user/wrong-answer'
};

// 启用禁用
function updateUserStatus(data) {
    return request('post', `${API_PATHS.USER}/update-user-ids-status`, data);
}

// 找回密码发送验证码
function sendResetPasswordCode(data) {
    return request('get', `${API_PATHS.LOGIN}/back-password-send-code`, data);
}

// 找回密码
function resetPassword(data) {
    return request('post', `${API_PATHS.LOGIN}/back-password`, data);
}

/*
* 手机号登录验证
* 参数user需包含：
*   phone     用户手机号
*   password  用户密码
*/
function phoneAuth(user) {
    return request('post', `${API_PATHS.LOGIN}/phone-auth`, user);
}

/*
* 用户注册接口
* 参数user需包含：
*   phone     用户手机号
*   password  用户密码
*   role      用户角色
*/
function enroll(user) {
    return request('post', `${API_PATHS.LOGIN}/enroll`, user);
}

/*
* 发送验证码
*   phone     用户手机号
*/
function sendCode(data) {
    return request('get', `${API_PATHS.LOGIN}/send-code`, data);
}

/*
* 存储手机号和验证码
*   phone     用户手机号
*   code      验证码
*/
function storePhoneCode(data) {
    return request('post', `${API_PATHS.LOGIN}/store-phone-and-code`, data);
}

/*
* 验证手机号是否注册
*   phone     用户手机号
*/
function verifyPhone(data) {
    return request('get', `${API_PATHS.LOGIN}/verify-phone`, data);
}

/**
 * 新增用户
 * @param user 新添加的用户信息
 * @returns {Promise<AxiosResponse<any>> | *} 返回新用户信息
 */
function addUser(user) {
    return request('post', `${API_PATHS.USER}/add-user`, user);
}



/*
* 修改用户信息
* 参数user需包含：
*   userId    用户ID（必填）
*   其他字段为可选修改项
*/
function updateUserInfo(user) {
    return request('post', `${API_PATHS.USER}/update-user-info`, user);
}

/*
* 查询用户列表（带分页）
* 参数params需包含：
*   user      筛选条件对象（可选）
*   pageNum   当前页码（默认1）
*   pageSize  每页条数（默认10）
*/
function listUser(params) {
    return request('get', `${API_PATHS.USER}/list-user`, params);
}

/*
* 获取当前用户信息
* 需要Authorization请求头携带token
*/
function getUser() {
    return request('get', `${API_PATHS.USER}/get-user`);
}

/*
* 批量获取用户信息
* 参数params需包含：
*   ids       用户ID数组
*/
function listUserByIds(params) {
    return request('get', `${API_PATHS.USER}/list-ids`, params);
}

/*
* 注销当前用户
* 需要Authorization请求头携带token
*/
function deleteUser() {
    return request('get', `${API_PATHS.USER}/delete-user`);
}



/*
* 创建错题记录
* 参数data需包含：
*   recordId      考试记录ID
*   questionId    题目ID
*   wrongAnswer   错误答案
* 需要Authorization请求头携带token
*/
function createWrongAnswer(data) {
    return request('post', `${API_PATHS.WRONG_ANSWER}/create`, data);
}

/*
* 批量创建错题记录
* 参数data为错题记录数组
* 需要Authorization请求头携带token
*/
function batchCreateWrongAnswer(data) {
    return request('post', `${API_PATHS.WRONG_ANSWER}/batch-create`, data);
}

/*
* 删除错题记录（物理删除）
* 参数data需包含：
*   pathValue 错题记录ID
* 需要Authorization请求头携带token
*/
function deleteWrongAnswer(data) {
    return request('post', `${API_PATHS.WRONG_ANSWER}/delete/${data.pathValue}`);
}

/*
* 删除错题记录（逻辑删除）
* 参数data需包含：
*   pathValue 错题记录ID
* 需要Authorization请求头携带token
*/
function softDeleteWrongAnswer(data) {
    return request('post', `${API_PATHS.WRONG_ANSWER}/soft-delete/${data.pathValue}`);
}

/*
* 分页查询用户错题本
* 参数params需包含：
*   page      当前页码（默认1）
*   pageSize  每页条数（默认10）
* 需要Authorization请求头携带token
*/
function listWrongAnswerByUser(params) {
    return request('get', `${API_PATHS.WRONG_ANSWER}/list-by-user`, params);
}

/*
* 获取错题详情
* 参数data需包含：
*   pathValue 错题记录ID
* 需要Authorization请求头携带token
*/
function getWrongAnswerDetail(data) {
    return request('get', `${API_PATHS.WRONG_ANSWER}/detail/${data.pathValue}`);
}

/*
* 根据考试记录查询错题
* 参数params需包含：
*   recordId  考试记录ID
*   page      当前页码（默认1）
*   pageSize  每页条数（默认10）
* 需要Authorization请求头携带token
*/
function listWrongAnswerByRecord(params) {
    return request('get', `${API_PATHS.WRONG_ANSWER}/list-by-record`, params);
}

// 统一导出所有接口
export {
    API_PATHS,
    phoneAuth,
    enroll,
    sendCode,
    storePhoneCode,
    verifyPhone,
    updateUserInfo,
    listUser,
    addUser,
    getUser,
    listUserByIds,
    deleteUser,
    createWrongAnswer,
    batchCreateWrongAnswer,
    deleteWrongAnswer,
    softDeleteWrongAnswer,
    listWrongAnswerByUser,
    getWrongAnswerDetail,
    listWrongAnswerByRecord,
    updateUserStatus,
    resetPassword,
    sendResetPasswordCode
};